import { getBaseUrl, getWidowValue, createScript } from '@/utils/index'
import * as auth from '@/utils/auth'
import { locIsAuth } from '@/utils/locStore/data'
export const initSDK = () => {
  console.log(12)
  const js = {
    src: `//res.wx.qq.com/open/js/jweixin-1.4.0.js`
  }
  return createScript(js).then(() => {
    return wxConfig()
  })
}

export const login = (flag = false) => {
  const loc = window.location
  const href = loc.href
  // const token = auth.getLocToken()
  // && token
  if (href.indexOf('WXTIME') !== -1 && !flag) {
    auth.getUserInfo(true, '1') // 获取用户信息并存储
    locIsAuth.set('1')
    // this.$auth.toGetUserInfo(true)
    // return initSDK()
    return Promise.resolve()
  }

  const hash = loc.hash
  console.log(loc.origin, loc.pathname, hash, '-------------------')
  let toUrl = `${loc.origin}${loc.pathname}?WXTIME=${+new Date()}`
  if (hash) {
    // if (hash.indexOf('?') !== -1) {
    //   hash = '#/pages/index/index?' + hash.split('?')[1]
    // } else {
    //   hash = '#/pages/index/index'
    // }
    toUrl = `${toUrl}${hash}`
    // toUrl = `${toUrl}#/pages/index/index`
  }
  const data = {
    url: toUrl
  }
  const query = {
    type: 'weixin',
    data: JSON.stringify(data)
  }

  const isShare = window.location.href.includes('isShare=1')
  if (isShare) {
    const sharePath = window.location.hash.replace('#', '')
    auth.sLoc.set('sharePath', sharePath)
  }

  console.log(query, 'query----------------------------------')

  return new Promise((resolve, reject) => {
    uni.$api.public
      .loginByOAuth2(query)
      .then((res) => {
        console.log(res, '-------------------')
        // const data = res.data
        // auth.saveToken(data.tokenId)
        // return
        const url = res.redirect_url

        window.location.href = url
        resolve()
        // return res
      })
      .catch(() => {
        reject()
      })
  })
}

// 获取地理位置
export const getLocation = () => {
  return new Promise((resolve, reject) => {
    window.wx.getLocation({
      type: 'gcj02', // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
      success: function (res) {
        console.log(res, '成功获取地理位置')
        const data = {
          lat: res.latitude,
          lng: res.longitude
        }
        resolve(data)
      },
      fail: function (res) {
        reject(res)
      }
    })
  })
}
const defaultShareInfo = {
  title: '这里购票好便宜！', // 分享标题
  desc: '这里购票好便宜！', // 分享描述
  link: auth.getLocBaseSet().h5_url, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  imgUrl: auth.getLocBaseSet().logo || '' // 分享图标
}
export const wxConfig = (info = defaultShareInfo) => {
  // const wxReady = locWxReady.get()
  // if (wxReady === '1') {
  //   return Promise.resolve()
  // }
  if (process.env.NODE_ENV === 'development') {
    return Promise.resolve()
  }
  return new Promise((resolve, reject) => {
    uni.$api.public
      .wxJsApiInit({
        url: window.location.href
      })
      .then((res) => {
        // const data = res.data
        const data = res
        window.wx.config({
          debug: data.debug || false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
          appId: data.appId, // 必填，公众号的唯一标识
          timestamp: data.timestamp, // 必填，生成签名的时间戳
          nonceStr: data.nonceStr, // 必填，生成签名的随机串
          signature: data.signature, // 必填，签名
          jsApiList: [
            'getLocation',
            'chooseWXPay',
            'scanQRCode',
            'updateAppMessageShareData',
            'updateTimelineShareData',
            'onMenuShareAppMessage',
            'onMenuShareTimeline'
          ] // 必填，需要使用的JS接口列表
        })
        window.wx.ready(() => {
          console.log('wx ready 成功')
          // locWxReady.set('1')
          if (info) {
            // console.log('wx share', info)
            const link = window.location.search
            // console.log(href)
            // const link = href.origin
            const opt = { ...info, link }
            // console.log(opt, 'opt')
            wxUpdateAppMessageShareData(opt)
            wxUpdateTimelineShareData(opt)
          }
          resolve()
        })
        window.wx.error(function (res) {
          console.log(res, 'wxconfig 失败')
          reject()
        })
      })
  })
}

export const wxPay1 = (data) => {
  return new Promise((resolve, reject) => {
    window.wx.chooseWXPay({
      appId: data.appId,
      timestamp: data.timeStamp, // 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
      nonceStr: data.nonceStr, // 支付签名随机串，不长于 32 位
      package: data.package, // 统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=\*\*\*）
      signType: data.signType, // 签名方式，默认为'SHA1'，使用新版支付需传入'MD5'
      paySign: data.paySign, // 支付签名
      success: function (res) {
        // 支付成功后的回调函数
        console.log('支付成功', res)
        resolve(res)
      },
      fail: function (err) {
        console.log('支付失败', err)
        reject(err)
      }
    })
  })
}

export const wxPay = async (data) => {
  console.log('调用新的wxpay', data)
  await getWidowValue('WeixinJSBridge')
  return new Promise((resolve, reject) => {
    window.WeixinJSBridge.invoke('getBrandWCPayRequest', data, function (res) {
      if (res.err_msg === 'get_brand_wcpay_request:ok') {
        console.log('支付成功', res)
        resolve(res)
      } else {
        console.log('支付失败', res)
        reject(res)
      }
    })
  })
}

export const wxScanQRCode = (needResult = 1) => {
  return new Promise((resolve, reject) => {
    window.wx.scanQRCode({
      needResult, // // 默认为1，扫描结果由微信处理，1则直接返回扫描结果，
      scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码，默认二者都有
      success: function (res) {
        console.log(res, '扫码结果')
        resolve(res.resultStr)
      },
      fail: function (err) {
        console.log('err-----------', err)
        reject(err)
      }
    })
  })
}

// 自定义“分享给朋友”及“分享到QQ”按钮的分享内容
// https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#10
export const wxUpdateAppMessageShareData = (data = {}) => {
  console.log('data:', data)
  return new Promise((resolve, reject) => {
    window.wx.updateAppMessageShareData({
      title: data.title || '', // 分享标题
      desc: data.desc, // 分享描述
      link: getBaseUrl() + data.link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
      imgUrl: data.imgUrl || auth.getLocBaseSet().logo || '', // 分享图标
      success: function (res) {
        console.log(res, '分享成功')
        resolve(res)
      },
      fail: function (res) {
        console.log('分享失败')
        try {
          reject(res)
        } catch (error) {
          resolve()
        }
      }
    })
  })
}

// 自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容（1.4.0）
// https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#10
export const wxUpdateTimelineShareData = (data = {}) => {
  console.log('data:', data)
  return new Promise((resolve, reject) => {
    window.wx.updateTimelineShareData({
      title: data.title, // 分享标题
      link: getBaseUrl() + data.link,
      imgUrl: data.imgUrl, // 分享图标
      success: function (res) {
        console.log(res, '分享成功')
        resolve(res)
      },
      fail: function (res) {
        console.log('分享失败')
        try {
          reject(res)
        } catch (error) {
          resolve()
        }
      }
    })
  })
}

// 获取“分享到朋友圈”按钮点击状态及自定义分享内容接口
export const onMenuShareTimeline = (data = {}) => {
  console.log('获取“分享到朋友圈”按钮点击状态及自定义分享内容接口')
  console.log(data)
  return new Promise((resolve, reject) => {
    window.wx.onMenuShareTimeline({
      title: data.title, // 分享标题
      link: getBaseUrl() + data.link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
      imgUrl: data.imgUrl, // 分享图标
      success: function (res) {
        console.log(res, '分享成功')
        resolve(res)
      },
      fail: function (res) {
        reject(res)
      }
    })
  })
}

// 获取“分享给朋友”按钮点击状态及自定义分享内容接口
export const onMenuShareAppMessage = (data = {}) => {
  console.log(data)
  return new Promise((resolve, reject) => {
    window.wx.onMenuShareAppMessage({
      title: data.title, // 分享标题
      link: getBaseUrl() + data.link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
      desc: data.desc, // 分享描述
      imgUrl: data.imgUrl, // 分享图标
      success: function (res) {
        console.log(res, '分享成功')
        resolve(res)
      },
      fail: function (res) {
        reject(res)
      }
    })
  })
}

// 关闭页面
export const close = () => {
  console.log('wx 关闭')
  window.wx.closeWindow()
}
